//
//  chemin.h
//  LOG2810
//
//  Created by Jules Thuillier on 11/03/2014.
//  Copyright (c) 2014 Jules Thuillier. All rights reserved.
//

#ifndef __LOG2810__chemin__
#define __LOG2810__chemin__

#include <iostream>
#include <string>
#include <iostream>
#include <vector>
#include <list>
#include <map>

using namespace std;

class chemin {
    
public:

    // Constructeur
    chemin();
    
    // Constructeur par parametre
    chemin(vector <vector <int> > matrice);
    
    // Destructeur
    ~chemin();
    
    // Fonction pour ajouter la matrice a analyser
    void set_matrix(vector <vector <int> > matrice);
    
    // Fonction pour demander a l'utilisateur le chemin qu'il desire parcourir
    void demander_chemin();

    // Fonction appelenant cheminpluscourt pour calculer le chemin
    void calculer_chemin();
    
	// Fonction affichant l'ensemble des sommets de la matrice
	void afficher_sommets();

    
private:
    
    // Fonction pour demander l'existance d'un chemin
    bool ask_existance(int &pointDepart, int& pointArrivee, int& agenceDepart, int& agenceArrivee );
    
    //Fonction trouvant la distance minimum pour un parcourt dans le cas où l'on revient à l'autre agence à la fin du parcours
    void cheminpluscourt (int &pointDepart, int& pointArrivee, int& agenceDepart, int& agenceArrivee );
    
    // Fonction pour vérifier l'existance d'un chemin direct
    bool verif_existance(int depart,int arrivee);
    
    // Fonction verifiant si un element appartient à un vecteur
    bool appartient(int object, list<int> vect);
    
    
    
    vector <vector <int> > matrix;
    
    //le vector est la liste des points pour arriver à un point avec le cout minimum
    //le double est le cout minimum pour y arriver
    struct val_point{
        vector<int> vecteurpoints;
        double valeurpoint;
    };
    
    int point_depart;
    int point_arrivee;
    int agence_depart;
    int agence_arrivee;
    
};

#endif /* defined(__LOG2810__chemin__) */
